/*
 * Screen_JLX_ZK_IC.h
 * 晶联讯液晶屏所使用的字库IC的操作库
 * Created: 2013/6/9 12:18:58
 */ 

#include "stm32f10x.h"

#ifndef SCREEN_JLX_ZK_IC_H_
#define SCREEN_JLX_ZK_IC_H_

#define ROM_IN  GPIO7
#define ROM_OUT GPIO6
#define ROM_SCK GPIO5
#define ROM_CS  GPIO4

/****送指令到晶联讯字库IC***/
void send_command_to_ROM( u8 command )
{
	u8 i;
	for(i=0; i<8; i++)
	{
		if(command&0x80)
			HighPD(ROM_IN);
		else
			LowPD(ROM_IN);
		HighPD(ROM_SCK);
		LowPD(ROM_SCK);
		command = command<<1;
	}
}

/****从晶联讯字库IC 中取汉字或字符数据（1 个字节）***/
static u8 get_data_from_ROM( )
{
	u8 i;
	u8 data = 0;
	HighPD(ROM_SCK);
	for(i=0; i<8; i++)
	{
		HighPD(ROM_OUT);
		LowPD(ROM_SCK);
		data = data<<1;
		if( PIND&ROM_OUT )
			data = data+1;
		else
			data = data+0;
		HighPD(ROM_SCK);
	}
	return data;
}

/* 从相关地址中连续读出 DataLen 个字节的数据到 pBuff 的地址
 * addrHigh：地址高8 位,
 * addrMid：地址中8 位,
 * addrLow：地址8 位，共24 位 */
void get_n_bytes_data_from_ROM(u8 addrHigh,u8 addrMid,u8 addrLow,u8 *pBuff,u8 DataLen)
{
	u8 i;
	LowPD(ROM_CS);
	HighPA(LCD_CS);
	LowPD(ROM_SCK);
	send_command_to_ROM(0x03);
	send_command_to_ROM(addrHigh);
	send_command_to_ROM(addrMid);
	send_command_to_ROM(addrLow);
	for(i = 0; i < DataLen; i++ )
	{
		*(pBuff+i) = get_data_from_ROM();
	}	
	HighPD(ROM_CS);
}

#endif /* SCREEN_JLX_ZK_IC_H_ */